package thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 线程池
 * 线程池时线程的管理机制，主要有两个作用:
 * 1:重用线程。   延长线程的生命周期，使得线程的生命周期不随任务的结束而结束，从而避免出现，
 *              线程频繁创建与销毁带来的额外系统开销。
 * 2:控制线程数量。线程数量过多会过度的占用线程内存，严重时导致系统瘫痪。并且线程数量过多
 *              也会出现CPU过度切换导致并发性能地下.
 */
public class ThreadPoolDemo {
    public static void main(String[] args) {
        //创建一个固定大小的线程池，这里的容量指定为2，即:线程池中有两条线程
        ExecutorService threadPool = Executors.newFixedThreadPool(2);
        for(int i=0;i<5;i++){
            Runnable r = new Runnable() {
                @Override
                public void run() {
                    Thread t = Thread.currentThread();
                    System.out.println(t+":正在执行线程......");
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(t+":执行完毕!");
                }
            };
            /** .execute():执行 */
            threadPool.execute(r);//执行
            System.out.println("只盼一个任务给线程!");
        }
        /** shutdown():关闭线程(执行完当前线程任务) shutdownNow():强制结束当前线程(不在继续执行线程任务)*/
        threadPool.shutdownNow();
        System.out.println("结束");
    }
}
